package net.siufung.boot.elasticsearch.service;


import org.elasticsearch.client.indices.GetIndexResponse;
import org.elasticsearch.common.settings.Settings;

import java.util.Map;

/**
 * @author 陈建峰
 * @since 2022/6/16 2:55 下午
 */
public interface IElasticsearchIndexService {

    /**
     * 是否存在索引
     * @param indexName 索引名称
     * @return true/false
     */
    Boolean existsIndex(String indexName);

    /**
     * 删除索引
     * @param indexName 索引名称
     * @return true/false
     */
    Boolean deleteIndex(String indexName);

    /**
     * 创建空索引,不含字段
     * @param indexName 索引名称
     * @return true/false
     */
    Boolean createEmptyIndex(String indexName);

    /**
     * 创建索引
     * @param indexName 索引名称
     * @param mapping 实体信息
     * @param settings 创建索引参数
     * @param aliasName 别名
     * @return true/false
     */
    Boolean createIndex(String indexName, Map<String, Object> mapping, Settings settings, String aliasName);

    /**
     * 获取索引信息
     * @param indexName 索引名称
     * @return 索引信息
     */
    GetIndexResponse getIndex(String indexName);

    /**
     * 添加默认索引别名
     * @param indexName 索引名称
     */
    void addDefaultAlias(String indexName);

    /**
     * 重建索引时的数据迁移,从旧索引迁移至新索引
     * @param oldIndexName 旧索引
     * @param releaseIndexName 新索引
     * @return true/false
     */
    Boolean reindex(String oldIndexName, String releaseIndexName);

    /**
     * 原子操作: 删除旧索引别名,将旧索的引别名添加至新索引
     *
     * @param oldIndexName     旧索引
     * @param releaseIndexName 新索引
     * @return 是否成功
     */
    Boolean changeAliasAtomic(String oldIndexName, String releaseIndexName);
}
